# -*- coding: utf-8 -*-
#  引用模块

import sys


from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWebEngineWidgets import QWebEngineView


class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 设置窗口标题
        self.setWindowTitle('浏览器')
        # 设置窗口大小900*600
        self.resize(1300, 700)
        self.show()

        # 当前view加载地址

        self.webview = WebEngineView(self)
        self.webview.setUrl(QUrl("https://www.bilibili.com/"))
        self.setCentralWidget(self.webview)


        # 使用QToolBar创建导航栏，并使用QAction创建按钮
        # 添加导航栏
        navigation_bar = QToolBar('Navigation')
        # 设定图标的大小
        navigation_bar.setIconSize(QSize(16, 16))
        # 添加导航栏到窗口中
        self.addToolBar(navigation_bar)

        # 添加URL地址栏
        self.urlbar = QLineEdit()
        # 让地址栏能响应回车按键信号
        self.urlbar.returnPressed.connect(self.navigate_to_url)
        navigation_bar.addSeparator()
        navigation_bar.addWidget(self.urlbar)

        # 让浏览器相应url地址的变化
        self.webview.urlChanged.connect(self.renew_urlbar)


    # 显示地址
    def navigate_to_url(self):
        q = QUrl(self.urlbar.text())
        if q.scheme() == '':
            q.setScheme('http')

        self.webview.setUrl(q)

    # 响应输入的地址
    def renew_urlbar(self, q):
        # 将当前网页的链接更新到地址栏
        print(q.toString())
        self.urlbar.setText(q.toString())
        self.urlbar.setCursorPosition(0)


# 第一种，是直接在本窗口新建tab的方式。 （不推荐使用这种方式）
# 注：这种方式有个问题，因为新建的tab覆盖了原来的tab，所以，原来tab的所有信息都找不到了，如浏览，账号，密码等。
class WebEngineView(QWebEngineView):
    # 重写createwindow()
    def createWindow(self, QWebEnginePage_WebWindowType):
        return self


#第二种，就是新建窗口
# class WebEngineView(QWebEngineView):
#     windowList = []
#
#     # 重写createwindow()
#     def createWindow(self, QWebEnginePage_WebWindowType):
#         new_webview = WebEngineView()
#         new_window = MainWindow()
#         new_window.setCentralWidget(new_webview)
#         # new_window.show()
#         self.windowList.append(new_window)  # 注：没有这句会崩溃！！！
#         return new_webview

# 程序入口
if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 创建主窗口
    browser = MainWindow()
    browser.show()
    # 运行应用，并监听事件
    sys.exit(app.exec_())